#include "../../lv_100ask_teach_demos.h"

#if LV_USE_100ASK_DEMO_TEST_ANIM
#include "test_anim.h"

static lv_style_t dashed_style;

static void anim_x_cb(void * var, int32_t v)
{
    lv_obj_set_x(var, v);
}

static void sw_event_cb(lv_event_t * e)
{
    lv_obj_t * sw = lv_event_get_target(e);
    lv_obj_t * label = lv_event_get_user_data(e);

    if(lv_obj_has_state(sw, LV_STATE_CHECKED)) {
        lv_anim_t a;
        lv_anim_init(&a);
        lv_anim_set_var(&a, label);
        lv_anim_set_values(&a, lv_obj_get_x(label), 100);
        lv_anim_set_time(&a, 500);
        lv_anim_set_exec_cb(&a, anim_x_cb);
        lv_anim_set_path_cb(&a, lv_anim_path_overshoot);
        lv_anim_start(&a);
    } else {
        lv_anim_t a;
        lv_anim_init(&a);
        lv_anim_set_var(&a, label);
        lv_anim_set_values(&a, lv_obj_get_x(label), -lv_obj_get_width(label));
        lv_anim_set_time(&a, 500);
        lv_anim_set_exec_cb(&a, anim_x_cb);
        lv_anim_set_path_cb(&a, lv_anim_path_ease_in);
        lv_anim_start(&a);
    }

}

/**
 * Start animation on an event
 */
void test_anim_1(void)
{
    lv_style_init(&dashed_style);
    /* 设置虚线边框 */
    lv_style_set_border_color(&dashed_style, lv_color_hex(0x000000));  // 边框颜色
    lv_style_set_border_width(&dashed_style, 1);                       // 边框宽度
    lv_style_set_border_opa(&dashed_style, LV_OPA_100);                // 不透明度
    lv_style_set_border_post(&dashed_style, true);                     // 绘制在文本后
    lv_style_set_border_side(&dashed_style, LV_BORDER_SIDE_FULL);      // 全边框
    //lv_style_set_border_dash_width(&dashed_style, 2);                  // 虚线每段长度
    //lv_style_set_border_dash_gap(&dashed_style, 2);                    // 虚线间隔
    /* 调整内边距使边框紧贴文本 */
    lv_style_set_pad_all(&dashed_style, 2);                            // 内边距


    lv_obj_t * label = lv_label_create(lv_scr_act());
    lv_label_set_text(label, "Hello animations!");
    lv_obj_set_pos(label, 100, 10);
    lv_obj_add_style(label, &dashed_style, 0); 


    lv_obj_t * sw = lv_switch_create(lv_scr_act());
    lv_obj_center(sw);
    lv_obj_add_state(sw, LV_STATE_CHECKED);
    lv_obj_add_event_cb(sw, sw_event_cb, LV_EVENT_VALUE_CHANGED, label);
}

#endif
